#准备并分割数据
import numpy as np
from sklearn.model_selection import train_test_split
x=np.array([[182],[178],[170],[168],[165],[162],[158],[154],[149],[144]])
y=np.array([[113],[105],[86],[83],[86],[74],[72],[45],[49],[43]])
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=0)

#验证最优K值
from sklearn.neighbors import KNeighborsRegressor
k_range=range(2,8)			     #设置k值的取值范围
k_error=[]				     #保存预测误差率的数组
for k in k_range:
    model=KNeighborsRegressor(n_neighbors=k)
    model.fit(x_train,y_train)
    scores=model.score(x_test,y_test)
    k_error.append(1-scores)

#使用画板，绘制不同K值下的误差率
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='Simhei'
#plt.plot(k_range,k_error,'r-')
#plt.xlabel('k值')
#plt.ylabel('预测误差率')
#plt.show()

#得到结论:当K=3时,误差率最低

model = KNeighborsRegressor(3)
model.fit(x_train,y_train)

plt.xlabel('身高/cm')							#图形横轴的标签名称
plt.ylabel('体重/kg')							#图形纵轴的标签名称
plt.axis([140,190,40,140])     #设置图像横轴与纵轴的最大值与最小值
plt.scatter(x,y,s=60,c='k',marker='o')		#绘制散点图
plt.plot(x,model.predict(x),'r-')		#绘制曲线
plt.show()